"""
nonlocal关键字的介绍：
    概述：
        是一个关键字，可以实现让内部函数去修改外部函数的变量值。
    回顾：
        global      声明变量    ->为全局变量
        nonlocal    声明变量    ->可以被内部函数修改

"""
# 需求：编写一个闭包，让内部函数去访问外部函数的变量，并修改她的值，观察结果
# 1：定义闭包代码，让内部函数去修改外部函数的变量值
def fn_outer(): # 声明外部函数
    x = 100

    def fn_inner(): # 声明内部函数
        # 核心，内部函数想修改外部函数的变量值，该变量值需要用到nonlocal关键字修饰
        nonlocal x
        # UnboundLocalError: cannot access local variable 'x' where it is not associated with a value
        x = x + 20  # 在内部函数中，去修改外部函数的变量值
        print(f"x的值为：{x}")

    return fn_inner

if __name__ == '__main__':
    fn = fn_outer()
    fn()
    fn()
    fn()
